# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 2、locust - python 脚本性能测试.py
@time : 2022/5/28 15:42
"""

"""
有 Web 界面，支持多协议，开源免费
1、安装  pip install  locust
2、执行性能测试脚本 ： locust -f '.\2、locust - python 脚本性能测试.py' --host=https://www.baidu.com
3、运行测试 ： http://localhost:8089  设置并发参数，并启动测试
    a、 Number of users to simulate 设置模拟用户数
    b、 Hatch rate (users spawned/second) 每秒启动的虚拟用户数（小于总用户数，以便看到用户增长相关趋势变化）
    c、 点击 'Start swarming' 按钮，开始运行性能测试
4、报告参数说明：
    4.1、 Statistics :  
                    Type - 请求的类型
                    Name - 请求的路径
                    request - 当前请求的数量
                    fails - 当前请求失败的数量
                    Median - 中间值，单位毫秒。一半的服务器响应时间低于该值，而另一半高于该值
                    Average - 平均值，单位毫秒。所有请求的平均响应时间
                    Min  -  请求的最小服务器响应时间，单位毫秒
                    Max -  请求的最大服务器响应时间，单位毫秒
                    Content Size - 单个请求的大小，单位字节
                    reqs/sec - 是每秒请求的个数
    4.2、 Charts :
                    吞吐量/每秒响应事务数（rps）实时统计
                    平均响应时间/平均事务数实时统计
                    虚拟用户数运行
    4.3、 Failures
    4.4、 Exceptions
    4.5、 Download Data
    
    

"""

"""
Httpuser类 ：就是用户行为的操作
Client方法 ： 发送请求
Task 类 ： 任务控制的类、权重、跳过
Testset类 ： 测试集类
On_start方法 ： 类似于自动化中的 setup ，每个虚拟用户执行前都会执行这个方法
On_stop方法 ： 类似于自动化的 teardown ， 每个虚拟用户执行结束后执行这个方法
@task 装饰器 ： 如果 task 后面带有数字，则代表的是测试集中的权重，参数越大每次被虚拟用户执行的概率越高，如果不设置默认为1
Between 方法中是休眠时间，会取 Between 数值中间的随机数
"""
from locust import HttpUser,between,task

class WebsiteUser(HttpUser):
    wait_time = between(5,15)

    @task
    def index(self):
        self.client.get("/")

    @task
    def keyword(self):
        self.client.get("/s?wd=locust")
        self.client.get("/?wd=测试")
